#ifndef BIBLIOTECA_H_
#define BIBLIOTECA_H_

#include <cstdlib>
#include <string>
#include <iostream>
#include <vector>
#include <map>
#include <fstream>
#include "usuario.h"
#include "pedidousuario.h"
#include "pedidobiblioteca.h"
#include "libro.h"
#include "FicheroDisperso.h"


#define FicheroLibros "libros.txt"
#define HashLibros "isbn.dat"


using namespace std;

typedef string login,isbn;

class ErrMem{};
class ErrLogin{};
class ErrorLibro{};
class UsuIncorrecto{};
class ErrAbrirFich{};

class Biblioteca{
	map<isbn,Libro> libros;
	map<login,Usuario> usuarios;
	vector<PedidoUsuario> pedidosUsuario;
	vector<PedidoBiblioteca> pedidosBiblioteca;
	FicheroDisperso hash;

public:

	Biblioteca();
	Biblioteca(const Biblioteca &bi);
	~Biblioteca(){};
	Usuario nuevoUsuario(string &alogin, string &anombre,string &aclave, bool &aadmin);
	Usuario* buscaUsuario(string alogin,string aclave);
	Libro* buscaLibro(string aisbn);
	void cargaUsuarios(string fichero);
	PedidoUsuario* creaPedidoUsuario(Usuario *ausuario, Libro *alibro,int aprioridad);
	PedidoBiblioteca* abrePedidoBiblioteca();
	void tramitaPedidoUsuario(PedidoUsuario *pedidoUsuario, PedidoBiblioteca *pedidoBiblioteca);
	void cierraPedidoBiblioteca(PedidoBiblioteca *pedidoBiblioteca);
	vector<PedidoUsuario*> buscaPedidosUsuarioPendientes(Usuario *usuario);
	vector<PedidoUsuario*> buscaPedidosUsuarioTramitados(Usuario *usuario);
	vector<PedidoBiblioteca*> buscaPedidosBibliotecaPendientes();
	vector<PedidoBiblioteca*> buscaPedidosBibliotecaTraminados();
	vector<PedidoBiblioteca*> Vector_PedidosBiblioteca();
	void Obtener_Libros();
	void Obtener_Usuarios();
	void Obtener_PedidosUsuario();
	void Obtener_PedidosBiblioteca();

};

#endif /* BIBLIOTECA_H_ */
